
//
//  HomeTableViewController.swift
//  mySina
//
//  Created by mac on 15/12/16.
//  Copyright © 2015年 tz. All rights reserved.
//

import UIKit
import AFNetworking
import SVProgressHUD
//定义cell
private let HomeCellID = "status"
class HomeTableViewController: BaseTableViewController {
    //添加自定义下拉刷新控件
    private lazy var refreshView:WBRefreshControl = WBRefreshControl()
    private lazy var statuses = [Status]()
    override func viewDidLoad() {
        super.viewDidLoad()
        if !userLogin {
            //如果没哟登陆，显示访客视图
            visitorLogView?.setupInfo(title: "登录后，别人评论你的微博，发给你的消息，都会在这里收到通知", imageName: nil)
            return
        }
        loadDate()
        prepareTableView()
    }
    override func viewDidAppear(animated: Bool) {
        super.viewDidAppear(animated)
        loadDate()
    }
    //注册cell
    private func prepareTableView() {
        //注册cell
        tableView.registerClass(StatusCell.self, forCellReuseIdentifier: HomeCellID)
        //自动计算行高
        //1、设置预估行高
        //tabelView能够自动计算行高 关键条件之一 就是 contentView必须添加约束
        tableView.estimatedRowHeight = 300
        //2、设置自动计算行高
        tableView.rowHeight = UITableViewAutomaticDimension
        //设置分割线样式
        tableView.separatorStyle = .None
//        //设置系统的下拉刷新
//        refreshControl = UIRefreshControl()
//        //绑定事件
//        refreshControl?.addTarget(self, action: "loadDate", forControlEvents: .ValueChanged)
        
        //添加自定义刷新控件
        tableView.addSubview(refreshView)
        
        //绑定事件
        refreshView.addTarget(self, action: "loadDate", forControlEvents: .ValueChanged)
        
        //设置tableView的tablefooterView
        tableView.tableFooterView = indicatorView
    }
    @objc private func loadDate() {
        //since_id与max_id互斥，有且只能传一个
        var since_id: Int64 = 0
        var max_id:Int64 = 0
        //根据小菊花是否在转动，判断是否上拉加载更多
        if indicatorView.isAnimating() {
            max_id = statuses.last?.id ?? 0
        } else {
            since_id = statuses.first?.id ?? 0
        }
        //使用viewModel获取网络数据
        StatusListViewModel.loadHomePageData(since_id, max_id: max_id) { (statuses) -> () in
            //结束网络加载,关闭动画
            self.refreshView.endRefreshing()
            guard let list = statuses else {
                return
            }
//            print(list.count)
            if since_id > 0 {
                //下拉刷新
                self.statuses = list + self.statuses
            } else if (max_id > 0) {
                //上拉加载
                self.statuses += list
                //数据加载完毕之后，应该停止动画，否则只能加载一页数据
                self.indicatorView.stopAnimating()
            } else {
                //首次加载
                self.statuses = list
            }
            //执行刷新
            self.tableView.reloadData()
        }
    }
    //懒加载小菊花
    private lazy var indicatorView:UIActivityIndicatorView = {
        let i = UIActivityIndicatorView(activityIndicatorStyle: .Gray)
        return i
    }()
}
//MARK: tableView的数据源的协议方法
extension HomeTableViewController {
    override func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
        return statuses.count
    }
    override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = tableView.dequeueReusableCellWithIdentifier(HomeCellID, forIndexPath: indexPath) as! StatusCell
        cell.status = statuses[indexPath.row]
        if !indicatorView.isAnimating() && indexPath.row == statuses.count - 1 { 
            //滑到最后一行并且 小菊花 没有转动的情况下  自动加载数据
            //在加载数据之前 转动小菊花
            indicatorView.startAnimating()
            loadDate()
        }
        return cell
    }
}
